#include "onecity.h"
#include <cstring>
#include <iostream>
using namespace std;
const int INF = 0x3f3f3f3f;

onecity::onecity()
{
    this->snum = 6;
    this->srnum = 30;//用不到道路的总条数，按照完全图设定
    //城市具体信息表
    this->site[0]={"学校","school",0,100,100};
    this->site[1]={"医院","hospital",1,65,80};
    this->site[2]={"商场","mall",2,130,170};
    this->site[3]={"餐饮","cafe",3,50,89};
    this->site[4]={"公园","park",4,120,100};
    this->site[5]={"工作区","business",5,78,99};

    //map 映射表
    this->getId["school"]=0;
    this->getId["hospital"]=1;
    this->getId["mall"]=2;
    this->getId["cafe"]=3;
    this->getId["park"]=4;
    this->getId["business"]=5;

    //道路信息
    //dist是距离的邻接矩阵
    for(int i=0;i<snum;i++){
        for(int j=0;j<snum;j++){
            if(i!=j)
                dist[i][j]=INF;
            else {
                dist[i][j]=0;
            }
        }
    }
   dist[0][1]=80;   dist[1][0]=80;
   dist[0][3]=160;   dist[3][0]=160;
   dist[0][5]=350;   dist[5][0]=350;
   dist[1][2]=160;   dist[2][1]=160;
   dist[1][3]=80;   dist[3][1]=80;
   dist[1][4]=40;   dist[4][1]=40;
   dist[1][5]=90;   dist[5][1]=90;
   dist[2][3]=50;   dist[3][2]=50;
   dist[2][4]=35;   dist[4][2]=35;
   dist[2][5]=165;   dist[5][2]=165;
   dist[3][4]=45;   dist[4][3]=45;
   dist[3][5]=85;   dist[5][3]=85;
   dist[4][5]=155;   dist[5][4]=155;

   //骑行和步行都不需要计算中转，两点间的道路上没有第三个场所，所以最短距离就是两点间直达距离，
   di[0][0]=0;
   di[1][1]=0;
   di[2][2]=0;
   di[3][3]=0;
   di[4][4]=0;
   di[5][5]=0;
   di[0][1]=80;   di[1][0]=80;
   di[0][2]=95;   di[2][0]=95;
   di[0][3]=105;   di[3][0]=105;
   di[0][4]=110;   di[4][0]=110;
   di[0][5]=75;   di[5][0]=75;
   di[1][2]=40;   di[2][1]=40;
   di[1][3]=45;   di[3][1]=45;
   di[1][4]=65;   di[4][1]=65;
   di[1][5]=70;   di[5][1]=70;
   di[2][3]=70;   di[3][2]=70;
   di[2][4]=20;   di[4][2]=20;
   di[2][5]=50;   di[5][2]=50;
   di[3][4]=10;   di[4][3]=10;
   di[3][5]=25;   di[5][3]=25;
   di[4][5]=35;   di[5][4]=35;

   //sp是道路通行距离除以速度的邻接矩阵
   //spc/spt/spb/spw分别为驾车、地铁、骑车、步行的时间矩阵
    for(int i=0;i<snum;i++){
        for(int j=0;j<snum;j++){
            spc[i][j]=dist[i][j]*1.0/45;
        }
    }
    spc[0][2]=dist[0][2]/15;//说明从0到2有拥堵
    spc[3][4]=dist[3][4]/16;
    spc[1][4]=dist[1][4]/15;
    spc[2][3]=dist[2][3]/16;

    for(int i=0;i<snum;i++){
        for(int j=0;j<snum;j++){
            spt[i][j]=dist[i][j]*1.0/50;
        }
    }

    //骑行和步行不受拥堵情况影响，最短时间就是最短距离除以速度
    for(int i=0;i<snum;i++){
        for(int j=0;j<snum;j++){
            spb[i][j]=di[i][j]*1.0/25;
        }
    }
    for(int i=0;i<snum;i++){
        for(int j=0;j<snum;j++){
            spw[i][j]=di[i][j]*1.0/5;
        }
    }

}
